/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package produccion;

/**
 *
 * @author Jorge
 */
public abstract class TrabajoImpresion {
    private Color cTira;
    private Color cRetira;
    private Publicacion pub;
    private Maquina mTira;
    private Maquina mRetira;

    public TrabajoImpresion(Color cTira, Maquina mTira) {
        this.cTira = cTira;
        this.mTira = mTira;
        this.cRetira = Color.NINGUNO;
        this.mRetira = new Maquina(NMaquina.NINGUNO);
    }

    public TrabajoImpresion(Color cTira, Color cRetira, Maquina mTira, Maquina mRetira) {
        this.cTira = cTira;
        this.cRetira = cRetira;
        this.mTira = mTira;
        this.mRetira = mRetira;
    }

    public Color getcTira() {
        return cTira;
    }

    public void setcTira(Color cTira) {
        this.cTira = cTira;
    }

    public Color getcRetira() {
        return cRetira;
    }

    public void setcRetira(Color cRetira) {
        this.cRetira = cRetira;
    }

    public Publicacion getPub() {
        return pub;
    }

    public void setPub(Publicacion pub) {
        this.pub = pub;
    }

    public Maquina getmTira() {
        return mTira;
    }

    public void setmTira(Maquina mTira) {
        this.mTira = mTira;
    }

    public Maquina getmRetira() {
        return mRetira;
    }

    public void setmRetira(Maquina mRetira) {
        this.mRetira = mRetira;
    }
    
    public Double calcularPlacasTira() {
        Double placasTira=0.0;
        switch (getcTira()) {
            case UNO: placasTira = 1.0;break;
            case DOS: placasTira = 2.0;break;
            case CUATRO: placasTira = 4.0;break;
            case NINGUNO: placasTira = 0.0;break;
            default:
                throw new AssertionError();
        }
        return placasTira;
    }    
   
    public Double calcularPlacasRetira() {
        Double placasRetira=0.0;
        switch (getcRetira()) {
            case UNO: placasRetira = 1.0;break;
            case DOS: placasRetira = 2.0;break;
            case CUATRO: placasRetira = 4.0;break;
            case NINGUNO: placasRetira = 0.0;break;
            default:
                throw new AssertionError();
        }
        return placasRetira;
    }    
    
    public Double calcularPlacas() {
        return calcularPlacasTira() + calcularPlacasRetira();
    }

    public Double calcularTiempoImpresionTira() {
        Double tiempoTira;
   
        tiempoTira = calcularPlacasTira() / getmTira().getVelocidad() ;

        return tiempoTira * getPub().getTiraje();
    }
    
    
    public Double calcularTiempoImpresionRetira() {
        Double tiempoRetira;
        
        tiempoRetira = calcularPlacasRetira() / getmRetira().getVelocidad() ;
        
        return tiempoRetira * getPub().getTiraje();
    }
    public Double calcularTiempoImpresion() {
        return calcularTiempoImpresionTira() + calcularTiempoImpresionRetira() + calcularTiempoMuerto();
    }
    
    public Double calcularTiempoMuerto() {
        return (calcularPlacas()-1) * 20 / 60;
    }
    
}
